home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xmcd-1.4 / libdi.d / configure.sh < prev    next >
Encoding:
Linux/UNIX/POSIX Shell Script  |  1995-05-10  |  20.9 KB  |  1,142 lines

  1. #!/bin/sh
  2. #
  3. # @(#)configure.sh    5.13 95/01/22
  4. #
  5. # Script to set up the device-dependent configuration files.
  6. #
  7. #    xmcd  - Motif(tm) CD Audio Player
  8. #    cda   - Command-line CD Audio Player
  9. #
  10. #    Copyright (C) 1995  Ti Kan
  11. #    E-mail: ti@amb.org
  12. #
  13. #    This program is free software; you can redistribute it and/or modify
  14. #    it under the terms of the GNU General Public License as published by
  15. #    the Free Software Foundation; either version 2 of the License, or
  16. #    (at your option) any later version.
  17. #
  18. #    This program is distributed in the hope that it will be useful,
  19. #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21. #    GNU General Public License for more details.
  22. #
  23. #    You should have received a copy of the GNU General Public License
  24. #    along with this program; if not, write to the Free Software
  25. #    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  26. #
  27.  
  28. PATH=/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/local/bin:/usr/ucb
  29. export PATH
  30.  
  31. ERRFILE=/tmp/xmcd.err
  32.  
  33. # Change the following directory to fit your local configuration
  34. LIBDIR=/usr/lib/X11
  35.  
  36. VER=1.4
  37.  
  38.  
  39. # Utility functions
  40.  
  41. doexit()
  42. {
  43.     if [ $1 -eq 0 ]
  44.     then
  45.         $ECHO "\nXmcd set-up is now complete.\n"
  46.         $ECHO "Please read the README file supplied with the xmcd"
  47.         $ECHO "distribution for hardware configuration information"
  48.         $ECHO "about specific CD-ROM drives.\n"
  49.     else
  50.         $ECHO "\nErrors have occurred configuring xmcd."
  51.         if [ $ERRFILE != /dev/null ]
  52.         then
  53.             $ECHO "See $ERRFILE for an error log."
  54.         fi
  55.     fi
  56.     exit $1
  57. }
  58.  
  59. logerr()
  60. {
  61.     if [ "$1" = "-p" ]
  62.     then
  63.         $ECHO "Error: $2" >&2
  64.     fi
  65.     $ECHO "$2" >>$ERRFILE
  66. }
  67.  
  68. getstr()
  69. {
  70.     $ECHO "$* \c"
  71.     read ANS
  72.     if [ -n "$ANS" ]
  73.     then
  74.         return 0
  75.     else
  76.         return 1
  77.     fi
  78. }
  79.  
  80. getyn()
  81. {
  82.     if [ -z "$YNDEF" ]
  83.     then
  84.         YNDEF=y
  85.     fi
  86.  
  87.     while :
  88.     do
  89.         $ECHO "$*? [${YNDEF}] \c"
  90.         read ANS
  91.         if [ -n "$ANS" ]
  92.         then
  93.             case $ANS in
  94.             [yY])
  95.                 RET=0
  96.                 break
  97.                 ;;
  98.             [nN])
  99.                 RET=1
  100.                 break
  101.                 ;;
  102.             *)
  103.                 $ECHO "Please answer y or n"
  104.                 ;;
  105.             esac
  106.         else
  107.             if [ $YNDEF = y ]
  108.             then
  109.                 RET=0
  110.             else
  111.                 RET=1
  112.             fi
  113.             break
  114.         fi
  115.     done
  116.  
  117.     YNDEF=
  118.     return $RET
  119. }
  120.  
  121.  
  122. dolink()
  123. {
  124.     # Try symlink first
  125.     ln -s $1 $2 2>/dev/null
  126.     if [ $? != 0 ]
  127.     then
  128.         # Use hard link
  129.         ln $1 $2 2>/dev/null
  130.     fi
  131.     STATUS=$?
  132.     if [ $STATUS != 0 ]
  133.     then
  134.         logerr -p "Cannot link $1 -> $2"
  135.     fi
  136. }
  137.  
  138.  
  139. ask_scsi_config()
  140. {
  141.     $ECHO "\n  Since you have an unlisted CD-ROM drive, I will assume"
  142.     $ECHO "  that it is SCSI-2 compliant.  If this is not true then"
  143.     $ECHO "  xmcd will probably not work."
  144.  
  145.     YNDEF=n
  146.     if getyn "\n  Do you want to continue"
  147.     then
  148.         METHOD=0
  149.         VENDOR=0
  150.         VOLBASE=0
  151.         VOLTAPER=0
  152.         PLAYNOTUR=0
  153.     else
  154.         return 1
  155.     fi
  156.  
  157.     $ECHO "\n  You will now be asked several technical questions about"
  158.     $ECHO "  your CD-ROM drive.  If you don't know the answer, try"
  159.     $ECHO "  accepting the default values, and if problems occur when"
  160.     $ECHO "  using xmcd, reconfigure the settings by running this"
  161.     $ECHO "  script again, or editing the $CONFIG"
  162.     $ECHO "  file."
  163.     $ECHO "\n  If you get an unlisted drive working with xmcd in this"
  164.     $ECHO "  manner, the author of xmcd would like to hear from you"
  165.     $ECHO "  and incorporate the settings into the next xmcd release."
  166.     $ECHO "  Please send e-mail to \"ti@amb.org\"."
  167.  
  168.     while :
  169.     do
  170.         $ECHO "\n  Does your CD-ROM drive on $XMCD_DEV support the following:\n"
  171.  
  172.         YNDEF=y
  173.         if getyn "  - The Play_Audio_MSF SCSI command"
  174.         then
  175.             PLAYMSF=True
  176.         else
  177.             PLAYMSF=False
  178.         fi
  179.  
  180.         YNDEF=n
  181.         if getyn "  - The Play_Audio(12) SCSI command"
  182.         then
  183.             PLAY12=True
  184.         else
  185.             PLAY12=False
  186.         fi
  187.  
  188.         YNDEF=y
  189.         if getyn "  - The Play_Audio(10) SCSI command"
  190.         then
  191.             PLAY10=True
  192.         else
  193.             PLAY10=False
  194.         fi
  195.  
  196.         YNDEF=y
  197.         if getyn "  - The Play_Audio_Track/Index command"
  198.         then
  199.             PLAYTI=True
  200.         else
  201.             PLAYTI=False
  202.         fi
  203.  
  204.         YNDEF=n
  205.         if getyn "  - Caddy load via the Start_Stop_Unit SCSI command"
  206.         then
  207.             LOAD=True
  208.         else
  209.             LOAD=False
  210.         fi
  211.  
  212.         YNDEF=y
  213.         if getyn "  - Caddy eject via the Start_Stop_Unit SCSI command"
  214.         then
  215.             EJECT=True
  216.         else
  217.             EJECT=False
  218.         fi
  219.  
  220.         YNDEF=y
  221.         if getyn "  - Disable block descriptor in the Mode_Sense SCSI command"
  222.         then
  223.             MODEDBD=True
  224.         else
  225.             MODEDBD=False
  226.         fi
  227.  
  228.         YNDEF=n
  229.         if getyn "  - Audio volume control via the Mode_Select SCSI command"
  230.         then
  231.             YNDEF=n
  232.             if getyn "  - Independent SCSI Mode_Select volume control for each channel"
  233.             then
  234.                 VOLSUPP=True
  235.                 BALSUPP=True
  236.             else
  237.                 VOLSUPP=True
  238.                 BALSUPP=False
  239.             fi
  240.  
  241.             YNDEF=n
  242.             if getyn "  - Audio channel routing via SCSI Mode_Select"
  243.             then
  244.                 CHRSUPP=True
  245.             else
  246.                 CHRSUPP=False
  247.             fi
  248.         else
  249.             VOLCTL=0
  250.             VOLSUPP=False
  251.             BALSUPP=False
  252.             CHRSUPP=False
  253.         fi
  254.  
  255.         YNDEF=y
  256.         if getyn "  - The Pause/Resume SCSI command"
  257.         then
  258.             PAUSE=True
  259.         else
  260.             PAUSE=False
  261.         fi
  262.  
  263.         YNDEF=y
  264.         if getyn "  - The Prevent/Allow_Medium_Removal SCSI command"
  265.         then
  266.             CADDYLOCK=True
  267.         else
  268.             CADDYLOCK=False
  269.         fi
  270.  
  271.         YNDEF=n
  272.         if getyn "  - Data Format 1 of the Read_Subchannel SCSI command"
  273.         then
  274.             CURPOSFMT=True
  275.         else
  276.             CURPOSFMT=False
  277.         fi
  278.  
  279.         $ECHO "\n  This is the configuration for ${XMCD_DEV}:\n"
  280.         $ECHO "  logicalDriverNumber:   $DRVNO"
  281.         $ECHO "  playAudio12Support:    $PLAY12"
  282.         $ECHO "  playAudioMSFSupport:   $PLAYMSF"
  283.         $ECHO "  playAudio10Support:    $PLAY10"
  284.         $ECHO "  playAudioTISupport:    $PLAYTI"
  285.         $ECHO "  loadSupport:           $LOAD"
  286.         $ECHO "  ejectSupport:          $EJECT"
  287.         $ECHO "  modeSenseSetDBD:       $MODEDBD"
  288.         $ECHO "  volumeControlSupport:  $VOLSUPP"
  289.         $ECHO "  balanceControlSupport: $BALSUPP"
  290.         $ECHO "  pauseResumeSupport:    $PAUSE"
  291.         $ECHO "  caddyLockSupport:      $CADDYLOCK"
  292.         $ECHO "  curposFormat:          $CURPOSFMT"
  293.  
  294.         YNDEF=y
  295.         if getyn "\n  Is this acceptable"
  296.         then
  297.             break
  298.         fi
  299.  
  300.         $ECHO "  Try again..."
  301.     done
  302.  
  303.     return 0
  304. }
  305.  
  306.  
  307. ask_nonscsi_config()
  308. {
  309.     $ECHO "\n  Non-SCSI CD-ROM drives are currently supported only"
  310.     $ECHO "  via the SunOS/Linux ioctl interface.  If you are not"
  311.     $ECHO "  running Linux then this will not work.  You must have the"
  312.     $ECHO "  appropriate CD-ROM driver configured in your Linux kernel."
  313.  
  314.     YNDEF=n
  315.     getyn "\n  Do you want to continue"
  316.     if [ $? -ne 0 ]
  317.     then
  318.         return 1
  319.     fi
  320.  
  321.     # Hardwire the parameters
  322.     METHOD=1
  323.     VENDOR=0
  324.     VOLBASE=0
  325.     VOLTAPER=0
  326.     PLAYMSF=True
  327.     PLAY12=False
  328.     PLAY10=False
  329.     PLAYTI=True
  330.     LOAD=True
  331.     EJECT=True
  332.     MODEDBD=False
  333.     VOLSUPP=True
  334.     BALSUPP=True
  335.     CHRSUPP=False
  336.     VOLCTL=3
  337.     PAUSE=True
  338.     CADDYLOCK=False
  339.     CURPOSFMT=False
  340.     PLAYNOTUR=False
  341.  
  342.     return 0
  343. }
  344.  
  345.  
  346. config_drive()
  347. {
  348.     $ECHO "\n  CD-ROM drive ($XMCD_DEV) configuration"
  349.     $ECHO "  Please select the CD-ROM drive brand:\n"
  350.  
  351.     eval `
  352.     (
  353.         $ECHO "ENTRIES=\""
  354.         cd $LIBDIR/xmcd/config/.tbl
  355.         for i in *
  356.         do
  357.             if [ -f $i ]
  358.             then
  359.                 if fgrep tblver=2 $LIBDIR/xmcd/config/.tbl/$i \
  360.                        >/dev/null 2>&1
  361.                 then
  362.                     $ECHO "$i \c"
  363.                 else
  364.                     logerr -p \
  365.                     "$LIBDIR/xmcd/config/.tbl/$i version mismatch"
  366.                 fi
  367.             fi
  368.         done
  369.         $ECHO "\""
  370.     )`
  371.  
  372.     j=1
  373.     if [ -n "$ENTRIES" ]
  374.     then
  375.         for i in $ENTRIES
  376.         do
  377.             brand=`fgrep tblalias= \
  378.                 $LIBDIR/xmcd/config/.tbl/$i 2>/dev/null | \
  379.                 sed 's/^.*tblalias=//'`
  380.             if [ -z "$brand" ]
  381.             then
  382.                 brand=$i
  383.             fi
  384.             $ECHO "  $j.\t$brand"
  385.             j=`expr $j + 1`
  386.         done
  387.     fi
  388.     $ECHO "  $j.\tother (SCSI)"
  389.     j=`expr $j + 1`
  390.     $ECHO "  $j.\tother (non-SCSI)"
  391.     $ECHO "  q.\tquit"
  392.  
  393.     while :
  394.     do
  395.         $ECHO "\n  Enter choice: \c"
  396.         read ANS
  397.  
  398.         if [ "$ANS" = q ]
  399.         then
  400.             return 1
  401.         fi
  402.  
  403.         if [ -z "$ANS" -o "$ANS" -lt 1 -o "$ANS" -gt $j ]
  404.         then
  405.             $ECHO "  Please answer 1 to $j."
  406.         elif [ "$ANS" = "`expr $j - 1`" ]
  407.         then
  408.             ask_scsi_config
  409.             return $?
  410.         elif [ "$ANS" = "$j" ]
  411.         then
  412.             ask_nonscsi_config
  413.             return $?
  414.         else
  415.             k=1
  416.             for i in $ENTRIES
  417.             do
  418.                 if [ $k = $ANS ]
  419.                 then
  420.                     model_sel $i $LIBDIR/xmcd/config/.tbl/$i
  421.                     return $?
  422.                 fi
  423.                 k=`expr $k + 1`
  424.             done
  425.  
  426.             # Should not get here.
  427.             return 1
  428.         fi
  429.     done
  430.  
  431.     # Should not get here.
  432.     return 1
  433. }
  434.  
  435.  
  436. model_sel()
  437. {
  438.     $ECHO "\n  CD-ROM drive ($XMCD_DEV) configuration"
  439.     $ECHO "  Please select the $1 CD-ROM drive model:\n"
  440.  
  441.     $AWK -F: '
  442.     BEGIN {
  443.         n = 1
  444.         printf("\t%-20s%s\n\n", "Model", "Mode")
  445.     }
  446.     !/^#/ {
  447.         if ($2 == 0) {
  448.             if ($3 == 1)
  449.                 mode = "SunOS/Linux ioctl"
  450.             else
  451.                 mode = "other"
  452.         }
  453.         else if ($2 == 1)
  454.             mode = "SCSI-1"
  455.         else if ($2 >= 2)
  456.             mode = "SCSI-2"
  457.  
  458.         printf("  %d.\t%-20s%s\n", n, $1, mode)
  459.         n++
  460.     }
  461.     END {
  462.         printf("  %d.\t%-20s%s\n", n, "other", "SCSI")
  463.         printf("  %d.\t%-20s%s\n", n+1, "other", "non-SCSI")
  464.         printf("  q.\tquit\n")
  465.     }
  466.     ' $2
  467.  
  468.     while :
  469.     do
  470.         $ECHO "\n  Enter choice: \c"
  471.         read ANS
  472.  
  473.         j=`grep -v "^#" $2 | wc -l | sed 's/^[     ]*//'`
  474.         j=`expr $j + 2`
  475.  
  476.         if [ "$ANS" = q ]
  477.         then
  478.             return 1
  479.         fi
  480.  
  481.         if [ -z "$ANS" -o "$ANS" -lt 1 -o "$ANS" -gt $j ]
  482.         then
  483.             $ECHO "  Please answer 1 to $j."
  484.         elif [ "$ANS" = "`expr $j - 1`" ]
  485.         then
  486.             ask_scsi_config
  487.         elif [ "$ANS" = "$j" ]
  488.         then
  489.             ask_nonscsi_config
  490.         else
  491.             read_config $2 $ANS
  492.         fi
  493.         return $?
  494.     done
  495.  
  496.     # Should not get here.
  497.     return 1
  498. }
  499.  
  500.  
  501. read_config()
  502. {
  503.     eval `$AWK -F: '
  504.     BEGIN {
  505.         n = 1
  506.     }
  507.     !/^#/ {
  508.         if (n == sel) {
  509.             if ($2 > 0) {
  510.                 print "METHOD=0"
  511.                 printf("VENDOR=%d\n", $3)
  512.             }
  513.             else {
  514.                 printf("METHOD=%d\n", $3)
  515.                 print "VENDOR=0"
  516.             }
  517.  
  518.             if ($4 == 0)
  519.                 print "PLAYMSF=False"
  520.             else
  521.                 print "PLAYMSF=True"
  522.             if ($5 == 0)
  523.                 print "PLAY12=False"
  524.             else
  525.                 print "PLAY12=True"
  526.             if ($6 == 0)
  527.                 print "PLAY10=False"
  528.             else
  529.                 print "PLAY10=True"
  530.             if ($7 == 0)
  531.                 print "PLAYTI=False"
  532.             else
  533.                 print "PLAYTI=True"
  534.             if ($8 == 0)
  535.                 print "LOAD=False"
  536.             else
  537.                 print "LOAD=True"
  538.             if ($9 == 0)
  539.                 print "EJECT=False"
  540.             else
  541.                 print "EJECT=True"
  542.             if ($10 == 0)
  543.                 print "MODEDBD=False"
  544.             else
  545.                 print "MODEDBD=True"
  546.  
  547.             printf("VOLCTL=%d\n", $11)
  548.             printf("VOLBASE=%d\n", $12)
  549.             printf("VOLTAPER=%d\n", $13)
  550.  
  551.             if ($14 == 0)
  552.                 print "PAUSE=False"
  553.             else
  554.                 print "PAUSE=True"
  555.             if ($15 == 0)
  556.                 print "CADDYLOCK=False"
  557.             else
  558.                 print "CADDYLOCK=True"
  559.             if ($16 == 0)
  560.                 print "CURPOSFMT=False"
  561.             else
  562.                 print "CURPOSFMT=True"
  563.             if ($17 == 0)
  564.                 print "PLAYNOTUR=False"
  565.             else
  566.                 print "PLAYNOTUR=True"
  567.         }
  568.         n++
  569.     }
  570.     ' sel=$2 $1`
  571.  
  572.     return $?
  573. }
  574.  
  575.  
  576. # Main starts here
  577.  
  578. # Use Sysv echo if possible
  579. if [ -x /usr/5bin/echo ]                # SunOS SysV echo
  580. then
  581.     ECHO=/usr/5bin/echo
  582. elif [ -z "`(echo -e a) 2>/dev/null | fgrep e`" ]    # GNU bash, etc.
  583. then
  584.     ECHO="echo -e"
  585. else                            # generic SysV
  586.     ECHO=echo
  587. fi
  588.  
  589. # If awk doesn't work well on your system, try changing the
  590. # following to nawk or gawk.
  591. AWK=awk
  592.  
  593. # Error log file handling
  594. if [ -f $ERRFILE -a ! -w $ERRFILE ]
  595. then
  596.     ERRFILE=/dev/null
  597. fi
  598.  
  599. $ECHO "\nXmcd version $VER Device Configuration Program"
  600.  
  601. # Sanity check
  602.  
  603. if [ ! -w $LIBDIR/xmcd/config ]
  604. then
  605.     logerr -p "No write permission in $LIBDIR/xmcd/config"
  606.     doexit 1
  607. fi
  608.  
  609. if [ ! -r $LIBDIR/xmcd/config/device.cfg ]
  610. then
  611.     logerr -p "Cannot find $LIBDIR/xmcd/config/device.cfg"
  612.     doexit 2
  613. fi
  614.  
  615. fgrep cfgver=1 $LIBDIR/xmcd/config/device.cfg >/dev/null 2>&1
  616. if [ $? != 0 ]
  617. then
  618.     logerr -p "$LIBDIR/xmcd/config/device.cfg version mismatch"
  619.     doexit 2
  620. fi
  621.  
  622. if [ ! -d $LIBDIR/xmcd/config/.tbl ]
  623. then
  624.     logerr -p "The directory $LIBDIR/xmcd/config/.tbl is missing"
  625.     doexit 2
  626. fi
  627.  
  628. # Configure platform-dependent and device-dependent parameters
  629.  
  630. OS_SYS=`uname -s 2>/dev/null`
  631. OS_VER=`uname -r 2>/dev/null`
  632. DEVBASE=/dev/rcdrom
  633. DEVSUFFIX=
  634. FIRST=0
  635. BLKDEV=0
  636. LINKLIBS=False
  637. VOLMGT=False
  638. STOPONLOAD=True
  639. EJECTONEXIT=False
  640. STOPONEXIT=True
  641. EXITONEJECT=False
  642. CLOSEONEJECT=False
  643. MAILCMD="mailx -s '%S' %A <%F >/dev/null 2>&1"
  644.  
  645. # Determine what platform we are running on
  646.  
  647. if [ "$OS_SYS" = A/UX ]
  648. then
  649.     # Apple A/UX
  650.     DEVBASE=/dev/scsi/
  651.     DEVSUFFIX=
  652.     FIRST=3
  653.     MAILCMD="mush -s '%S' %A <%F >/dev/null 2>&1"
  654. elif [ "$OS_SYS" = dgux ]
  655. then
  656.     # Data General DG/UX
  657.     DEVBASE="/dev/scsi/scsi(ncsc@7(FFFB0000,7),"
  658.     DEVSUFFIX=",0)"
  659.     FIRST=2
  660. elif [ "$OS_SYS" = FreeBSD ]
  661. then
  662.     # FreeBSD
  663.     DEVBASE=/dev/rcd
  664.     DEVSUFFIX=c
  665.     FIRST=0
  666. elif [ "$OS_SYS" = OSF1 ]
  667. then
  668.     case "`uname -m`" in
  669.     alpha)    # DEC OSF/1
  670.         DEVBASE=/dev/rrz
  671.         DEVSUFFIX=c
  672.         FIRST=4
  673.         ;;
  674.     *)
  675.         OS_VER=unknown
  676.         ;;
  677.     esac
  678. elif [ "$OS_SYS" = ULTRIX ]
  679. then
  680.     case "`uname -m`" in
  681.     RISC)    # DEC Ultrix
  682.         DEVBASE=/dev/rrz
  683.         DEVSUFFIX=c
  684.         FIRST=4
  685.         MAILCMD="Mail -s '%S' %A <%F >/dev/null 2>&1"
  686.         ;;
  687.     *)
  688.         OS_VER=unknown
  689.         ;;
  690.     esac
  691. elif [ "$OS_SYS" = AIX ]
  692. then
  693.     # IBM AIX
  694.     DEVBASE=/dev/rcd
  695.     DEVSUFFIX=
  696.     FIRST=0
  697. elif [ "$OS_SYS" = Linux ]
  698. then
  699.     # Linux
  700.     DEVBASE=/dev/sr
  701.     DEVSUFFIX=
  702.     FIRST=0
  703.     BLKDEV=1
  704.     MAILCMD="elm -s '%S' %A <%F >/dev/null 2>&1"
  705. elif [ "$OS_SYS" = IRIX ]
  706. then
  707.     # SGI IRIX
  708.     DEVBASE=`hinv | grep CDROM | line | \
  709.         sed 's/^.*controller \([0-9]*\).*$/\/dev\/scsi\/sc\1d/'`
  710.     DEVSUFFIX=l0
  711.     FIRST=`hinv | grep CDROM | line | sed 's/^.*unit \([0-9]*\).*$/\1/'`
  712. elif [ -x /bin/hp-pa ] && hp-pa
  713. then
  714.     case $OS_VER in
  715.     A.09*)    # HP-UX 9.x
  716.         DEVBASE=/dev/rdsk/c201d
  717.         DEVSUFFIX=s0
  718.         FIRST=4
  719.         ;;
  720.     *)
  721.         OS_VER=unknown
  722.         ;;
  723.     esac
  724. elif [ -x /bin/ftx ] && ftx
  725. then
  726.     case $OS_VER in
  727.     4.*)    
  728.         if [ -x /bin/hppa ] && hppa
  729.         then
  730.             # Stratus FTX SVR4/PA-RISC
  731.             DEVBASE=/dev/rcdrom/c4a1d
  732.             DEVSUFFIX=
  733.             FIRST=0
  734.             LINKLIBS=True
  735.         else
  736.             # On non-supported FTX variants
  737.             OS_VER=unknown
  738.         fi
  739.         ;;
  740.     *)
  741.         OS_VER=unknown
  742.         ;;
  743.     esac
  744. elif [ -x /bin/sun ] && sun
  745. then
  746.     case $OS_VER in
  747.     4.*)    # SunOS 4.x
  748.         case `arch -k` in
  749.         sun4[cm])
  750.             DEVBASE=/dev/rsr
  751.             DEVSUFFIX=
  752.             FIRST=0
  753.             MAILCMD="Mail -s '%S' %A <%F >/dev/null 2>&1"
  754.             ;;
  755.         *)
  756.             OS_VER=unknown
  757.             ;;
  758.         esac
  759.         ;;
  760.     5.*)    # SunOS 5.x
  761.         YNDEF=n
  762.         if getyn \
  763.         "Does your system support the Volume Manager (/usr/sbin/vold)"
  764.         then
  765.             DEVBASE=/vol/dev/aliases/cdrom
  766.             DEVSUFFIX=
  767.             FIRST=0
  768.             VOLMGT=True
  769.             CLOSEONEJECT=True
  770.         else
  771.             DEVBASE=/dev/rdsk/c0t
  772.             DEVSUFFIX=d0s0
  773.             FIRST=6
  774.         fi
  775.         LINKLIBS=True
  776.         ;;
  777.     *)
  778.         OS_VER=unknown
  779.         ;;
  780.     esac
  781. elif [ -x /bin/i386 -o -x /sbin/i386 ] && i386
  782. then
  783.     case $OS_VER in
  784.     3.2)    # SCO ODT
  785.         DEVBASE=/dev/rcd
  786.         DEVSUFFIX=
  787.         FIRST=0
  788.         ;;
  789.     4.0)    # UNIX SVR4.0/x86
  790.         DEVBASE=/dev/rcdrom/cd
  791.         DEVSUFFIX=
  792.         FIRST=0
  793.         LINKLIBS=True
  794.         ;;
  795.     4.1)    # UNIX SVR4.1/x86
  796.         DEVBASE=/dev/rcdrom/cdrom
  797.         DEVSUFFIX=
  798.         FIRST=1
  799.         LINKLIBS=True
  800.         ;;
  801.     4.2)    # UNIX SVR4.2/x86
  802.         DEVBASE=/dev/rcdrom/cdrom
  803.         DEVSUFFIX=
  804.         FIRST=1
  805.         LINKLIBS=True
  806.         ;;
  807.     4*MP)    # UNIX SVR4.2MP/x86
  808.         DEVBASE=/dev/rcdrom/cdrom
  809.         DEVSUFFIX=
  810.         FIRST=1
  811.         LINKLIBS=True
  812.         ;;
  813.     *)
  814.         OS_VER=unknown
  815.         ;;
  816.     esac
  817. elif [ -x /bin/m88k ] && m88k
  818. then
  819.     case $OS_VER in
  820.     4.0)    # UNIX SVR4.0/88k
  821.         DEVBASE=/dev/rdsk/m187_c0d
  822.         DEVSUFFIX=s7
  823.         FIRST=3
  824.         LINKLIBS=True
  825.         ;;
  826.     *)
  827.         OS_VER=unknown
  828.         ;;
  829.     esac
  830. else
  831.     OS_VER=unknown
  832. fi
  833.  
  834. NOT_SUPPORTED="Error: You are not running an operating system that's\n\
  835. currently supported by xmcd."
  836.  
  837. if [ "$OS_VER" = unknown ]
  838. then
  839.     $ECHO "$NOT_SUPPORTED"
  840.     YNDEF=n
  841.     getyn "Would you like to proceed anyway?"
  842.     if [ $? -ne 0 ]
  843.     then
  844.         $ECHO "\nConfiguration aborted." >&2
  845.         logerr -n "Configuration aborted by user"
  846.         doexit 3
  847.     fi
  848. fi
  849.  
  850. DRVNO=0
  851. DEVNO=$FIRST
  852. SEDLINE=
  853. while :
  854. do
  855.     $ECHO "\nConfiguring SCSI CD-ROM drive $DRVNO..."
  856.  
  857.     DEFAULT_DEV="${DEVBASE}${DEVNO}${DEVSUFFIX}"
  858.  
  859.     while :
  860.     do
  861.         if getstr "\n  Enter CD-ROM device path: [$DEFAULT_DEV]"
  862.         then
  863.             XMCD_DEV=$ANS
  864.         else
  865.             XMCD_DEV=$DEFAULT_DEV
  866.         fi
  867.  
  868.         if [ $VOLMGT = True ]
  869.         then
  870.             break
  871.         fi
  872.         if [ $BLKDEV = 0 -a -c $XMCD_DEV ]
  873.         then
  874.             break
  875.         fi
  876.         if [ $BLKDEV = 1 -a -b $XMCD_DEV ]
  877.         then
  878.             break
  879.         fi
  880.  
  881.         $ECHO "  $XMCD_DEV is an invalid device."
  882.     done
  883.  
  884.     if [ $DRVNO -eq 0 ]
  885.     then
  886.         #
  887.         # Configure app-defaults/XMcd file
  888.         #
  889.         chmod 644 $LIBDIR/app-defaults/XMcd 2>/dev/null
  890.         if [ -w $LIBDIR/app-defaults/XMcd ]
  891.         then
  892.             $AWK '
  893.             /^XMcd\*libdir:/ {
  894.                 printf("XMcd*libdir:\t\t\t%s/xmcd\n", libdir)
  895.             }
  896.             /^XMcd\*cddbMailCmd:/ {
  897.                 printf("XMcd*cddbMailCmd:\t\t%s\n", mailcmd)
  898.             }
  899.             !/^XMcd\*(libdir|cddbMailCmd):/ {
  900.                 print $0
  901.             }' libdir="$LIBDIR" mailcmd="$MAILCMD" \
  902.                 $LIBDIR/app-defaults/XMcd > /tmp/xmcd.$$
  903.  
  904.             cp /tmp/xmcd.$$ $LIBDIR/app-defaults/XMcd
  905.             rm -f /tmp/xmcd.$$
  906.  
  907.             if [ $LIBDIR != "/usr/lib/X11" -a \
  908.                  -d /usr/lib/X11/app-defaults ]
  909.             then
  910.                 rm -f /usr/lib/X11/app-defaults/._trash_
  911.                 >$LIBDIR/app-defaults/._trash_
  912.  
  913.                 if [ ! -f /usr/lib/X11/app-defaults/._trash_ ]
  914.                 then
  915.                     rm -f /usr/lib/X11/app-defaults/XMcd
  916.                     dolink $LIBDIR/app-defaults/XMcd \
  917.                         /usr/lib/X11/app-defaults/XMcd
  918.                 fi
  919.  
  920.                 rm -f $LIBDIR/app-defaults/._trash_
  921.             fi
  922.         else
  923.             logerr -p "Cannot configure $LIBDIR/app-defaults/XMcd"
  924.         fi
  925.  
  926.         #
  927.         # Configure common.cfg file
  928.         #
  929.         chmod 644 $LIBDIR/xmcd/config/common.cfg 2>/dev/null
  930.         if [ -w $LIBDIR/xmcd/config/common.cfg ]
  931.         then
  932.             $AWK '
  933.             /^device:/    {
  934.                 printf("device:\t\t\t\t%s\n", device)
  935.             }
  936.             /^solaris2VolumeManager:/ {
  937.                 printf("solaris2VolumeManager:\t%s\n", volmgt)
  938.             }
  939.             !/^(device|solaris2VolumeManager):/ {
  940.                 print $0
  941.             }' device=$XMCD_DEV volmgt=$VOLMGT \
  942.                 $LIBDIR/xmcd/config/common.cfg > /tmp/xmcd.$$
  943.  
  944.             cp /tmp/xmcd.$$ $LIBDIR/xmcd/config/common.cfg
  945.             rm -f /tmp/xmcd.$$
  946.         else
  947.             logerr -p \
  948.                 "Cannot configure $LIBDIR/xmcd/config/common.cfg"
  949.         fi
  950.     fi
  951.  
  952.     CONFIG=$LIBDIR/xmcd/config/`basename $XMCD_DEV`
  953.  
  954.     config_drive
  955.     if [ $? != 0 ]
  956.     then
  957.         $ECHO "\nConfiguration aborted." >&2
  958.         logerr -n "Configuration aborted by user."
  959.         doexit $?
  960.     fi
  961.  
  962.     DRVNOTICE="\n\n  NOTE: This drive does not support these features:"
  963.  
  964.     if [ $PLAYTI = False ]
  965.     then
  966.         $ECHO "$DRVNOTICE"
  967.         DRVNOTICE="\c"
  968.         $ECHO "  - The Previous Index and Next Index buttons."
  969.     fi
  970.  
  971.     if [ $CADDYLOCK = False ]
  972.     then
  973.         $ECHO "$DRVNOTICE"
  974.         DRVNOTICE="\c"
  975.         $ECHO "  - The caddy lock."
  976.     fi
  977.  
  978.     if [ $LOAD = False ]
  979.     then
  980.         $ECHO "$DRVNOTICE"
  981.         DRVNOTICE="\c"
  982.         $ECHO "  - Software-controlled caddy load."
  983.     fi
  984.  
  985.     if [ $PAUSE = False -a $VENDOR = 0 ]
  986.     then
  987.         $ECHO "$DRVNOTICE"
  988.         DRVNOTICE="\c"
  989.         $ECHO "  - Audio pause/resume function."
  990.     fi
  991.  
  992.     case "$VOLCTL" in
  993.     0)
  994.         $ECHO "$DRVNOTICE"
  995.         DRVNOTICE="\c"
  996.         $ECHO "  - The volume, balance and channel routing controls."
  997.         VOLSUPP=False
  998.         BALSUPP=False
  999.         CHRSUPP=False
  1000.         ;;
  1001.     1)
  1002.         $ECHO "$DRVNOTICE"
  1003.         DRVNOTICE="\c"
  1004.         $ECHO "  - The balance and channel routing controls."
  1005.         VOLSUPP=True
  1006.         BALSUPP=False
  1007.         CHRSUPP=False
  1008.         ;;
  1009.     2)
  1010.         $ECHO "$DRVNOTICE"
  1011.         DRVNOTICE="\c"
  1012.         $ECHO "  - The volume and channel routing controls."
  1013.         VOLSUPP=False
  1014.         BALSUPP=True
  1015.         CHRSUPP=False
  1016.         ;;
  1017.     3)
  1018.         $ECHO "$DRVNOTICE"
  1019.         DRVNOTICE="\c"
  1020.         $ECHO "  - The channel routing control."
  1021.         VOLSUPP=True
  1022.         BALSUPP=True
  1023.         CHRSUPP=False
  1024.         ;;
  1025.     4)
  1026.         $ECHO "$DRVNOTICE"
  1027.         DRVNOTICE="\c"
  1028.         $ECHO "  - The volume and balance controls."
  1029.         VOLSUPP=False
  1030.         BALSUPP=False
  1031.         CHRSUPP=True
  1032.         ;;
  1033.     5)
  1034.         $ECHO "$DRVNOTICE"
  1035.         DRVNOTICE="\c"
  1036.         $ECHO "  - The balance control."
  1037.         VOLSUPP=True
  1038.         BALSUPP=False
  1039.         CHRSUPP=True
  1040.         ;;
  1041.     6)
  1042.         $ECHO "$DRVNOTICE"
  1043.         DRVNOTICE="\c"
  1044.         $ECHO "  - The volume control."
  1045.         VOLSUPP=False
  1046.         BALSUPP=True
  1047.         CHRSUPP=True
  1048.         ;;
  1049.     7)
  1050.         VOLSUPP=True
  1051.         BALSUPP=True
  1052.         CHRSUPP=True
  1053.         ;;
  1054.     *)
  1055.         ;;
  1056.     esac
  1057.  
  1058.     $ECHO "\n  Creating the $CONFIG file..."
  1059.  
  1060.     sed \
  1061.     -e "s/^logicalDriveNumber:.*/logicalDriveNumber:    $DRVNO/" \
  1062.     -e "s/^deviceInterfaceMethod:.*/deviceInterfaceMethod:    $METHOD/" \
  1063.     -e "s/^driveVendorCode:.*/driveVendorCode:    $VENDOR/" \
  1064.     -e "s/^playAudio12Support:.*/playAudio12Support:    $PLAY12/" \
  1065.     -e "s/^playAudioMSFSupport:.*/playAudioMSFSupport:    $PLAYMSF/" \
  1066.     -e "s/^playAudio10Support:.*/playAudio10Support:    $PLAY10/" \
  1067.     -e "s/^playAudioTISupport:.*/playAudioTISupport:    $PLAYTI/" \
  1068.     -e "s/^loadSupport:.*/loadSupport:        $LOAD/" \
  1069.     -e "s/^ejectSupport:.*/ejectSupport:        $EJECT/" \
  1070.     -e "s/^modeSenseSetDBD:.*/modeSenseSetDBD:    $MODEDBD/" \
  1071.     -e "s/^volumeControlSupport:.*/volumeControlSupport:    $VOLSUPP/" \
  1072.     -e "s/^balanceControlSupport:.*/balanceControlSupport:    $BALSUPP/" \
  1073.     -e "s/^channelRouteSupport:.*/channelRouteSupport:    $CHRSUPP/" \
  1074.     -e "s/^volumeControlTaper:.*/volumeControlTaper:    $VOLTAPER/" \
  1075.     -e "s/^scsiAudioVolumeBase:.*/scsiAudioVolumeBase:    $VOLBASE/" \
  1076.     -e "s/^pauseResumeSupport:.*/pauseResumeSupport:    $PAUSE/" \
  1077.     -e "s/^caddyLockSupport:.*/caddyLockSupport:    $CADDYLOCK/" \
  1078.     -e "s/^curposFormat:.*/curposFormat:        $CURPOSFMT/" \
  1079.     -e "s/^noTURWhenPlaying:.*/noTURWhenPlaying:    $PLAYNOTUR/" \
  1080.     -e "s/^spinDownOnLoad:.*/spinDownOnLoad:        $STOPONLOAD/" \
  1081.     -e "s/^ejectOnExit:.*/ejectOnExit:        $EJECTONEXIT/" \
  1082.     -e "s/^stopOnExit:.*/stopOnExit:        $STOPONEXIT/" \
  1083.     -e "s/^exitOnEject:.*/exitOnEject:        $EXITONEJECT/" \
  1084.     -e "s/^closeOnEject:.*/closeOnEject:        $CLOSEONEJECT/" \
  1085.        < $LIBDIR/xmcd/config/device.cfg > $CONFIG
  1086.     chmod 644 $CONFIG 2>/dev/null
  1087.     chown bin $CONFIG 2>/dev/null
  1088.     chgrp bin $CONFIG 2>/dev/null
  1089.  
  1090.     YNDEF=n
  1091.     if getyn "\n  Do you have more SCSI CD-ROM drives on your system"
  1092.     then
  1093.         DRVNO=`expr $DRVNO + 1`
  1094.         DEVNO=`expr $DEVNO + 1`
  1095.     else
  1096.         break
  1097.     fi
  1098. done
  1099.  
  1100.  
  1101. if [ $LINKLIBS = True ]
  1102. then
  1103. MSG="\nFor security reasons, SVR4 setuid programs (such as\n\
  1104. xmcd) search only /usr/lib and /usr/ccs/lib for shared\n\
  1105. libraries, unless explicitly compiled otherwise.\n\
  1106. Most X shared libraries on SVR4 systems do not reside\n\
  1107. in the standard locations and xmcd may not run correctly.\n\
  1108. Symbolic links can be made to correct this problem.\n"
  1109.  
  1110.     FIRST=1
  1111.     for i in $LIBDIR /usr/X/lib /usr/X11/lib /usr/X386/lib /usr/X11R5/lib \
  1112.          /usr/X11R6/lib /usr/lib/X11
  1113.     do
  1114.         if [ $i != /usr/lib -a -d $i ]
  1115.         then
  1116.             cd $i
  1117.             for j in libX*.so*
  1118.             do
  1119.                 if [ "$j" != 'libX*.so*' -a ! -f /usr/lib/"$j" ]
  1120.                 then
  1121.                     if [ $FIRST -eq 1 ]
  1122.                     then
  1123.                         $ECHO "$MSG"
  1124.                         FIRST=0
  1125.                     fi
  1126.  
  1127.                     YNDEF=y
  1128.                     if getyn "Link $i/$j to /usr/lib/$j"
  1129.                     then
  1130.                         dolink $i/$j /usr/lib/$j
  1131.                     else
  1132.                         $ECHO "$i/$j not linked."
  1133.                     fi
  1134.                 fi
  1135.             done
  1136.         fi
  1137.     done
  1138. fi
  1139.  
  1140. doexit 0
  1141.  
  1142.